extends Node

class_name StateMachine

var current_state: Object

# 保存历史状态列表
var history = []
# 保存所有状态
var states = {}

# 入口
func _ready():
	# 遍历子节点状态
	for state in get_children():
		state.fsm = self
		# 将所有子节点状态放到states字典里
		states[state.name] = state
		
		# 如果存在当前状态，将所有非子节点状态删除
		# 如果不存在当前状态，最后一个子节点状态会被设置为当前状态
		if current_state:
			remove_child(state)
		else:
			current_state = state
	# 进入当前状态
	current_state.enter()

# 变换状态
func change_to(state_name):
	# 将当前状态加入到历史状态中，回退状态时使用
	history.append(current_state.name)
	# 设置状态
	set_state(state_name)

# 回退到上一个状态
func back():
	if history.size() > 0:
		set_state(history.pop_back())

# 设置状态
func set_state(state_name):
	# 删除当前状态节点，设置新的活动状态
	remove_child(current_state)
	current_state = states[state_name]
	add_child(current_state)
	current_state.enter()
